package com.szjz.elasticsearch.eshelper.animation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * es 字段设置
 *
 * @author shibo
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ESField {

	/**
	 * long    不能被分词 数字类型 docValues = true  可排序
	 * integer 不能被分词 数字类型 docValues = true  可排序
	 * double  不能被分词 数字类型 docValues = true  可排序
	 * float   不能被分词 数字类型 docValues = true  可排序
	 * short   不能被分词 数字类型 docValues = true  可排序
	 * date    不能被分词 日期类型 docValues = true 可排序
	 * boolean 不能被分词 布尔类型
	 * keyword 不能被分词 字符串类型 可用于term,terms精准查询
	 * text    可以被分词(默认使用标准分词器）字符串类型 不可用于term,terms精准查询
	 * <p>
	 * 总结：只有text类型参与分词 其他类型均不分词
	 * 参考：http://note.youdao.com/s/RzBp5T1M
	 */
	String type() default "keyword";

	boolean index() default true;

	/**
	 * 由于Doc Values es默认开启，如果你不会执行基于一个字段的 聚合、排序或执行脚本（Script ），
	 * 你可以选择关闭Doc Values，这可以为你节省磁盘空间，提高索引数据的速度。
	 * false: value ==>> docs 通过value 查询keys
	 * 无法基于该字段排序、聚合、在脚本中访问字段值
	 * true: doc ==>> values 通过key查询values
	 * 增加一个相应的正排索引，这增加的磁盘占用，也会导致索引数据速度慢一些。支持聚合，但不支持查询，因为不会对这个字段生成倒排索引
	 *
	 * @return
	 */
	boolean docValues() default false;
}
